#!/bin/bash

mkdir keys 
cd keys

## 1). 生成一个CA私钥
echo ""
echo ""
echo "1). 生成一个CA私钥"
if [ ! -e "ca.key" ]; then
    openssl genrsa -out ca.key 2048
fi


## 2).使用ca私钥生成客户端的数字证书
# 这一步需要交互式输入信息，
# Common Name (eg, your name or your server's hostname) []:  这里填写机器的域名或者ip
# 服务端会用到
echo ""
echo ""
echo "2).使用CA私钥生成客户端的数字证书"
if [ ! -e "ca.crt" ]; then
    openssl req -x509 -new -nodes -key ca.key -days 3650 -out ca.crt
fi


## 3).生成客户端的私钥
echo ""
echo ""
echo "3).生成客户端的私钥"
openssl genrsa -out client.key 2048


## 4).使用客户端私钥生成数字证书请求
# 这一步需要交互式输入信息
# Common Name (eg, your name or your server's hostname) []:  这个要填
# A challenge password :  这个要填
echo ""
echo ""
echo "4).使用客户端私钥生成数字证书请求"
openssl req -new -key client.key -out client.csr


## 5). 创建客户端扩展配置信息
echo ""
echo ""
echo "5). 创建客户端扩展配置信息"
echo "extendedKeyUsage=clientAuth" > client.ext
# echo "subjectAltName=IP:127.0.0.1,DNS:localhost" >> client.ext

## 6). 使用客户端ca私钥和客户端扩展配置信息签发客户端的数字证书
echo ""
echo ""
echo " 6). 使用客户端ca私钥和客户端扩展配置信息签发客户端的数字证书"
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile client.ext -out client.crt -days 3650



# 最后
# 客户端：
# 私钥文件   ca.key
# 数字证书   ca.crt
